home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / var / lib / dpkg / info / libc6.preinst < prev    next >
Text File  |  2009-10-07  |  15KB  |  404 lines

  1. #!/bin/sh
  2. set -e
  3. export LC_ALL=C
  4.  
  5. type=$1
  6. preversion=$2
  7.  
  8. rm_conffile() {
  9.     local PKGNAME="$1"
  10.     local CONFFILE="$2"
  11.  
  12.     [ -e "$CONFFILE" ] || return 0
  13.  
  14.     local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')"
  15.     local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PKGNAME | \
  16.             sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")"
  17.     if [ "$md5sum" != "$old_md5sum" ]; then
  18.         echo "Obsolete conffile $CONFFILE has been modified by you."
  19.         echo "Saving as $CONFFILE.dpkg-bak ..."
  20.         mv -f "$CONFFILE" "$CONFFILE".dpkg-bak
  21.     else
  22.         echo "Removing obsolete conffile $CONFFILE ..."
  23.         rm -f "$CONFFILE"
  24.     fi
  25. }
  26.  
  27. linux_compare_versions () {
  28.     verA=$(($(echo "$1" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 10000 + \2 \* 100 + \3/')))
  29.     verB=$(($(echo "$3" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1 \* 10000 + \2 \* 100 + \3/')))
  30.  
  31.     test $verA -$2 $verB
  32. }
  33.  
  34. kfreebsd_compare_versions () {
  35.     verA=$(($(echo "$1" | sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \* 100 + \2/')))
  36.     verB=$(($(echo "$3" | sed 's/\([0-9]*\)\.\([0-9]*\).*/\1 \* 100 + \2/')))
  37.  
  38.     test $verA -$2 $verB
  39. }
  40.  
  41. kernel26_help() {
  42.     echo ""
  43.     echo "The installation of a 2.6 kernel _could_ ask you to install a new libc"
  44.     echo "first, this is NOT a bug, and should *NOT* be reported. In that case,"
  45.     echo "please add lenny sources to your /etc/apt/sources.list and run:"
  46.     echo "  apt-get install -t lenny linux-image-2.6"
  47.     echo "Then reboot into this new kernel, and proceed with your upgrade"
  48. }
  49.  
  50. if [ "$type" = upgrade ]
  51. then
  52.     # Remove old /etc/init.d/glibc.sh init script
  53.     if dpkg --compare-versions "$preversion" le "2.9-22"; then
  54.         rm_conffile libc6 "/etc/init.d/glibc.sh"
  55.     update-rc.d glibc.sh remove >/dev/null
  56.     fi
  57.  
  58.     # Load debconf module if available
  59.     if [ -f /usr/share/debconf/confmodule ] ; then
  60.         . /usr/share/debconf/confmodule
  61.     fi
  62.  
  63.     if [ -n "$preversion" ]; then
  64.     # NSS authentication trouble guard
  65.     if dpkg --compare-versions "$preversion" lt 2.9-5; then
  66.         if pidof xscreensaver xlockmore >/dev/null; then
  67.         if [ -f /usr/share/debconf/confmodule ] ; then
  68.             db_version 2.0
  69.             db_reset glibc/disable-screensaver
  70.             db_input critical glibc/disable-screensaver || true
  71.             db_go || true
  72.         else
  73.             echo "xscreensaver and xlockmore must be restarted before upgrading"
  74.             echo
  75.             echo "One or more running instances of xscreensaver or xlockmore have been"
  76.             echo "detected on this system. Because of incompatible library changes, the"
  77.             echo "upgrade of the GNU C library will leave you unable to authenticate to"
  78.             echo "these programs. You should arrange for these programs to be restarted"
  79.             echo "or stopped before continuing this upgrade, to avoid locking your users"
  80.             echo "out of their current sessions."
  81.             echo
  82.             frontend=`echo "$DEBIAN_FRONTEND" | tr '[:upper:]' '[:lower:]'`
  83.             if [ "$frontend" = noninteractive ]; then
  84.             echo "Non-interactive mode, upgrade glibc forcibly"
  85.             else
  86.                 echo -n "Press a key to continue"
  87.                 read answer
  88.             fi
  89.             echo
  90.         fi
  91.         fi
  92.  
  93.         check="gdm kdm proftpd postgresql xdm"
  94.         # NSS services check: NSS_CHECK
  95.         echo -n "Checking for services that may need to be restarted..."
  96.         # Only get the ones that are installed, and configured
  97.         check=$(dpkg -s $check 2> /dev/null | egrep '^Package:|^Status:' | awk '{if ($1 ~ /^Package:/) { package=$2 } else if ($0 ~ /^Status: .* installed$/) { print package }}')
  98.         # some init scripts don't match the package names
  99.         check=$(echo $check | \
  100.                 sed -e's/\bapache2-common\b/apache2/g' \
  101.                     -e's/\bat\b/atd/g' \
  102.                     -e's/\bdovecot-common\b/dovecot/g' \
  103.                     -e's/\bexim4-base\b/exim4/g' \
  104.                     -e's/\blpr\b/lpd/g' \
  105.                     -e's/\blpr-ppd\b/lpd-ppd/g' \
  106.                     -e's/\bmysql-server\b/mysql/g' \
  107.                     -e's/\bsasl2-bin\b/saslauthd/g' \
  108.         )
  109.         echo
  110.         echo "Checking init scripts..."
  111.         rl=$(runlevel | sed 's/.*\ //')
  112.         for service in $check; do
  113.             if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then
  114.                 idl=$(ls /etc/init.d/${service} 2> /dev/null | head -n 1)
  115.                 if [ -n "$idl" ] && [ -x $idl ]; then
  116.                     services="$service $services"
  117.                 else
  118.                     echo "WARNING: init script for $service not found."
  119.                 fi
  120.             else
  121.                 if [ -f /usr/share/file-rc/rc ] || [ -f /usr/lib/file-rc/rc ] && [ -f /etc/runlevel.conf ]; then
  122.                     idl=$(filerc $rl $service)
  123.                 else
  124.                     idl=$(ls /etc/rc${rl}.d/S??${service} 2> /dev/null | head -1)
  125.                 fi
  126.                 if [ -n "$idl" ] && [ -x $idl ]; then
  127.                     services="$service $services"
  128.                 fi
  129.             fi
  130.         done
  131.         if [ -n "$services" ]; then 
  132.         if [ -f /usr/share/debconf/confmodule ] ; then
  133.                 db_version 2.0
  134.             db_reset glibc/upgrade
  135.             db_subst glibc/upgrade services $services
  136.             if [ "$RELEASE_UPGRADE_MODE" = desktop ]; then
  137.             db_input medium glibc/upgrade || true
  138.             else
  139.             db_input critical glibc/upgrade || true
  140.             fi
  141.             db_go || true
  142.             db_get glibc/upgrade
  143.             answer=$RET
  144.         else
  145.             echo "Do you want to upgrade glibc now?"
  146.             echo
  147.             echo "Running services and programs that are using NSS need to be restarted,"
  148.             echo "otherwise they might not be able to do lookup or authentication any more."
  149.             echo "The installation process is able to restart some services (such as ssh or"
  150.             echo "telnetd), but other programs cannot be restarted automatically.  One such"
  151.             echo "program that needs manual stopping and restart after the glibc upgrade by"
  152.             echo "yourself is xdm - because automatic restart might disconnect your active"
  153.             echo "X11 sessions."
  154.             echo
  155.             echo "This script detected the following installed services which must be"
  156.             echo "stopped before the upgrade: $services"
  157.             echo
  158.             echo "If you want to interrupt the upgrade now and continue later, please"
  159.             echo "answer No to the question below."
  160.             echo 
  161.             frontend=`echo "$DEBIAN_FRONTEND" | tr '[:upper:]' '[:lower:]'`
  162.             if [ "$frontend" = noninteractive ]; then
  163.             echo "Non-interactive mode, upgrade glibc forcibly"
  164.             answer=true
  165.             else
  166.                 echo -n "Do you want to upgrade glibc now? [Y/n] "
  167.                 read answer
  168.                 case $answer in
  169.                 Y*|y*) answer=true ;;
  170.                 N*|n*) answer=false ;;
  171.                 *) answer=true ;;
  172.             esac
  173.             fi
  174.             echo
  175.         fi
  176.  
  177.         if [ "x$answer" != "xtrue" ]; then
  178.                 echo "Stopped glibc upgrade.  Please retry the upgrade after you have"
  179.                 echo "checked or stopped services by hand."
  180.                 exit 1
  181.         fi
  182.         fi
  183.     fi # end upgrading and $preversion lt 2.9-1
  184.     fi # Upgrading
  185.  
  186.     # This will keep us from using hwcap libs (optimized) during an
  187.     # upgrade.
  188.     touch /etc/ld.so.nohwcap
  189. fi
  190.  
  191. # Sanity check.
  192. # If there are versions of glibc outside of the normal installation
  193. # location (/lib, /lib64, etc.) then things may break very badly
  194. # as soon as ld.so is replaced by a new version.  This check is not
  195. # foolproof, but it's pretty accurate.  This script ignores libraries
  196. # with different sonames, and libraries incompatible with the 
  197. # to-be-installed ld.so.
  198.  
  199. check_dirs () {
  200.   for dir in $*; do
  201.     # Follow symlinks
  202.     dirlink=$(readlink -e $dir)
  203.     [ -n "$dirlink" ] && dir=$dirlink 
  204.     
  205.     # Handle /lib in LD_LIBRARY_PATH.
  206.     if expr $dir : "/lib.*" > /dev/null; then
  207.       continue
  208.     fi
  209.     # Skip ia32-libs package on ia64, and similar libraries
  210.     # (not sure why these get added to /etc/ld.so.conf)
  211.     if expr $dir : "/emul/.*" > /dev/null; then
  212.       continue
  213.     fi
  214.     if test -d $dir; then
  215.       output=$(ls $dir | egrep '^(libc.so.6|libm.so.6|libpthread.so.0|librt.so.1|libdl.so.2)$' 2>/dev/null)
  216.  
  217.       if test -n "$output"; then
  218.     # See if the found libraries are compatible with the system ld.so;
  219.     # if they aren't, they'll be ignored.  Check e_ident, e_type (which
  220.     # will just be ET_DYN), and e_machine.  If a match is found, there
  221.     # is a risk of breakage.
  222.     for lib in $output
  223.     do
  224.       if test -f "$dir/$lib"; then
  225.         libbytes=`head -c 20 $dir/$lib | od -c`
  226.         if test "$ldbytes" = "$libbytes"; then
  227.           echo "Matching libraries: $dir/$lib"
  228.           return 0
  229.         fi
  230.       fi
  231.     done
  232.       fi
  233.     fi
  234.   done
  235.   return 1
  236. }
  237.  
  238. if [ "$type" != abort-upgrade ]
  239. then
  240.   ldbytes=`head -c 20 /lib/ld-linux.so.2 | od -c`
  241.   dirs="/lib32 /lib64 /usr/local/lib /usr/local/lib32 /usr/local/lib64"
  242.   if ! test -L /usr; then
  243.     dirs="$dirs /usr/lib /usr/lib32 /usr/lib64"
  244.   fi
  245.   if check_dirs $dirs; then
  246.     echo
  247.     echo "A copy of glibc was found in an unexpected directory."
  248.     echo "It is not safe to upgrade the C library in this situation;"
  249.     echo "please remove that copy of the C library and try again."
  250.     echo "Please check: https://launchpad.net/bugs/81125"
  251.   fi
  252.  
  253.   if test -n "$LD_LIBRARY_PATH"; then
  254.     dirs=$(echo $LD_LIBRARY_PATH | sed 's/:/ /')
  255.     if check_dirs $dirs; then
  256.       echo
  257.       echo "Another copy of the C library was found via LD_LIBRARY_PATH."
  258.       echo "It is not safe to upgrade the C library in this situation;"
  259.       echo "please remove the directory from LD_LIBRARY_PATH and try again."
  260.       echo "Please check: https://launchpad.net/bugs/81125"
  261.     fi
  262.   fi
  263.   if test -e /etc/ld.so.conf; then
  264.     dirs=$(echo $(cat /etc/ld.so.conf))
  265.     if check_dirs $dirs; then
  266.       echo
  267.       echo "Another copy of the C library was found via /etc/ld.so.conf."
  268.       echo "It is not safe to upgrade the C library in this situation;"
  269.       echo "please remove the directory from /etc/ld.so.conf and try again."
  270.       echo "Please check: https://launchpad.net/bugs/81125"
  271.     fi
  272.   fi
  273.   for i in ld-2.3.2.so libc-2.3.2.so ld-2.3.6.so libc-2.3.6.so ; do
  274.     if [ -e /lib/tls/$i ] && ! dpkg-query -L libc6 2>/dev/null | grep -q /lib/tls/$i ; then
  275.       echo
  276.       echo "A non-dpkg owned copy of the C library was found in /lib/tls."
  277.       echo "It is not safe to upgrade the C library in this situation;"
  278.       echo "please remove that copy of the C library and try again."
  279.       exit 1
  280.     fi
  281.   done
  282.   if [ -e /lib/tls/i686/cmov/libc.so.6 ] || [ -e /lib/i686/cmov/libc.so.6 ] ; then
  283.     status_i686=$(dpkg -s libc6-i686 2>/dev/null | grep ^Status: | sed -e 's/^Status: \(.*\) \(.*\) \(.*\)/\3/g')
  284.     status_xen=$(dpkg -s libc6-xen 2>/dev/null | grep ^Status: | sed -e 's/^Status: \(.*\) \(.*\) \(.*\)/\3/g')
  285.     if ([ -z "$status_i686" ] || [ "$status_i686" = "not-installed" ] || [ "$status_i686" = "config-files" ]) && \
  286.        ([ -z "$status_xen" ] || [ "$status_xen" = "not-installed" ] || [ "$status_xen" = "config-files" ]); then
  287.       echo
  288.       echo "A non-dpkg owned copy of the libc6-i686 package was found."
  289.       echo "It is not safe to upgrade the C library in this situation;"
  290.       echo "please remove that copy of the C library and try again."
  291.       exit 1
  292.     fi
  293.   fi
  294.   if [ -n "$LD_ASSUME_KERNEL" ] ; then
  295.     if dpkg --compare-versions "$LD_ASSUME_KERNEL" le "2.6.1"; then
  296.       echo
  297.       echo "POSIX threads library NPTL requires kernel version 2.6.1"
  298.       echo "or later.  It appears that LD_ASSUME_KERNEL is set to $LD_ASSUME_KERNEL."
  299.       echo "It is not safe to upgrade the C library in this situation;"
  300.       echo "Please unset this environment variable and try again."
  301.       exit 1
  302.     fi
  303.   fi
  304.  
  305.   # glibc kernel version check
  306.   system=`uname -s`
  307.   if [ "$system" = "Linux" ]
  308.   then
  309.       # Test to make sure z < 255, in x.y.z-n form of kernel version
  310.       # Also make sure we don't trip on x.y.zFOO-n form
  311.       kernel_rev=$(uname -r | sed 's/\([0-9]*\.[0-9]*\.\)\([0-9]*\)\(.*\)/\2/')
  312.       if [ "$kernel_rev" -ge 255 ]
  313.       then
  314.           echo "WARNING: Your kernel version indicates a revision number"
  315.           echo "of 255 or greater.  Glibc has a number of built in"
  316.           echo "assumptions that this revision number is less than 255."
  317.           echo "If you\'ve built your own kernel, please make sure that any"
  318.           echo "custom version numbers are appended to the upstream"
  319.           echo "kernel number with a dash or some other delimiter."
  320.  
  321.           exit 1
  322.       fi
  323.  
  324.       # sanity checking for the appropriate kernel on each architecture.
  325.       realarch=`uname -m`
  326.       kernel_ver=`uname -r`
  327.  
  328.       # convert "armv4l" and similar to just "arm", and "mips64" and similar
  329.       # to just "mips"
  330.       case $realarch in
  331.         arm*) realarch="arm";;
  332.         mips*) realarch="mips";;
  333.       esac
  334.  
  335.       # The GNU libc requires a >= 2.6.18 kernel (except on m68k)
  336.       if [ "$realarch" != m68k ]
  337.       then
  338.       # Ubuntu buildd limitation: allow just 2.6.15, although 2.6.18 is required
  339.       # for some patches
  340.           #if linux_compare_versions "$kernel_ver" lt 2.6.18
  341.           if linux_compare_versions "$kernel_ver" lt 2.6.15
  342.           then
  343.               echo WARNING: this version of the GNU libc requires kernel version
  344.               echo 2.6.18 or later.  Please upgrade your kernel before installing
  345.               echo glibc.
  346.               kernel26_help
  347.  
  348.               exit 1
  349.           fi
  350.       fi
  351.  
  352.       # The GNU libc is now built with --with-kernel= >= 2.4.1 on m68k
  353.       if [ "$realarch" = m68k ]
  354.       then
  355.           if linux_compare_versions "$kernel_ver" lt 2.4.1
  356.           then
  357.               echo WARNING: This version of glibc requires that you be running
  358.               echo kernel version 2.4.1 or later.  Earlier kernels contained
  359.               echo bugs that may render the system unusable if a modern version
  360.               echo of glibc is installed.
  361.               kernel26_help
  362.  
  363.               exit 1
  364.           fi
  365.       fi
  366.  
  367.       # From glibc 2.6-3 SPARC V8 support is dropped.
  368.       if [ "$realarch" = sparc ]
  369.       then
  370.           # The process could be run using linux32, check for /proc.
  371.           if [ -f /proc/cpuinfo ]
  372.           then
  373.              case "$(sed '/^type/!d;s/^type.*: //g' /proc/cpuinfo)" in
  374.                  sun4u)
  375.                     # UltraSPARC CPU
  376.                     ;;
  377.                  sun4v)
  378.                     # Niagara CPU
  379.                     ;;
  380.                  *)
  381.                     echo "WARNING: This machine has a SPARC V8 or earlier class processor."
  382.                     echo "Debian lenny and later does not support such old hardware"
  383.                     echo "any longer."
  384.                     exit 1
  385.                     ;;
  386.              esac
  387.           fi
  388.       fi
  389.   elif [ $system = "GNU/kFreeBSD" ] ; then
  390.       kernel_ver=`uname -r`
  391.       if kfreebsd_compare_versions "$kernel_ver" lt 6.0
  392.       then
  393.           echo WARNING: This version of glibc uses UMTX_OP_WAIT and UMTX_OP_WAKE
  394.         echo syscalls that are not present in the current running kernel. They
  395.         echo have been added in kFreeBSD 6.0.  Your system should still work,
  396.         echo but it is recommended to upgrade to a more recent version.
  397.       fi
  398.   fi
  399. fi
  400.  
  401.  
  402.  
  403. exit 0
  404.